﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.SqlTypes;
using DAL;
using Utils;
using System.Data;
using System.Data.Sql;
using System.Data.SqlClient;
using BLL;
using System.Text;

namespace WebUI.Pages
{
    public partial class edit : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            ConnectionManager connMgr = new ConnectionManager();
            RequestController reqController = new RequestController();
            UserController usrController = new UserController();
            FabricanteController fabController = new FabricanteController();
            EstagioVendaController evController = new EstagioVendaController();
            TypeController tpController = new TypeController();
            statusController stController = new statusController();
            SlaController slaController = new SlaController();

            int idSolicitacao = Convert.ToInt32(Request.QueryString["id"]);

            if (!this.Page.IsPostBack)
            {
                try
                {
                    DataRow Solicitacao = reqController.GetRequest(idSolicitacao);

                    int idAccountManager = Convert.ToInt32(Solicitacao[0]);
                    int idAnalistaNegocios = 0;
                    int idTipoSolicitacao = Convert.ToInt32(Solicitacao[4]);
                    int idFabricante = Convert.ToInt32(Solicitacao[7]);
                    int idEstagioVendas = Convert.ToInt32(Solicitacao[9]);
                    int idCriador = Convert.ToInt32(Solicitacao[12]);
                    int idProposta = 0;
                    
                    char Status = Convert.ToChar(Solicitacao[8]);
                    char PeriodoExpectativa = Convert.ToChar(Solicitacao[10]);
                    
                    string DescSolicitacao = Solicitacao[2].ToString();
                    string Cliente = Solicitacao[6].ToString();
                    string Titulo = Solicitacao[16].ToString();
                    
                    DateTime DataSolicitacao = new DateTime();
                    DateTime DataExpectativa = new DateTime();
                    DateTime DataDesignacao = new DateTime();
                    DateTime DataEntrega = new DateTime();
                    DateTime DataFinalizacao = new DateTime();

                    if (Solicitacao[17] != DBNull.Value) { idProposta = Convert.ToInt32(Solicitacao[17]);} 
                    if (Solicitacao[1] != DBNull.Value) { idAnalistaNegocios = Convert.ToInt32(Solicitacao[1]);} 
                    if (Solicitacao[3] != DBNull.Value) { DataSolicitacao = Convert.ToDateTime(Solicitacao[3]);}
                    if (Solicitacao[5] != DBNull.Value) { DataExpectativa = Convert.ToDateTime(Solicitacao[5]);}
                    if (Solicitacao[13] != DBNull.Value) { DataDesignacao = Convert.ToDateTime(Solicitacao[13]);}
                    if (Solicitacao[14] != DBNull.Value) { DataEntrega = Convert.ToDateTime(Solicitacao[14]);}
                    if (Solicitacao[15] != DBNull.Value) { DataFinalizacao = Convert.ToDateTime(Solicitacao[15]);}
                    if (idAnalistaNegocios != 0) { lblAnalistaNegocios.Text = usrController.GetUserName(idAnalistaNegocios); lblAnalistaID.Text = idAnalistaNegocios.ToString(); }
                    if (Convert.ToInt32(Solicitacao[18]) != 0) { lblSugerido.Text = "(Sugerido: " + usrController.GetUserName(Convert.ToInt32(Solicitacao[18])) + ")"; }
                    if (Solicitacao[19] != DBNull.Value) { txtDataRevisada.Text = Solicitacao[19].ToString(); }

                    txtTitulo.Text = Titulo;
                    txtProposta.Text = idProposta.ToString();
                    txtDescricao.Text = DescSolicitacao;
                    
                    lblIDSolicitacao.Text = idSolicitacao.ToString();
                    lblStatusID.Text = Status.ToString();
                    lblTipoID.Text = idTipoSolicitacao.ToString();
                    lblStatus.Text = stController.GetStatusInfo(Status)[1].ToString();
                    lblCriador.Text = "Criado por: " + usrController.GetUserName(idCriador);                   
                    lblCliente.Text = Cliente;
                    lblDataExpectativa.Text = DataExpectativa.ToString();
                    lblDataSolicitacao.Text = DataSolicitacao.ToString();

                    DataTable dtAM = usrController.GetTeamUsers(1);
                    dtAM.Merge(usrController.GetTeamUsers(2));
                    dtAM.Merge(usrController.GetTeamUsers(9));
                    DataTable dtAN = usrController.GetTeamUsers(3);

                    ddlTipo.DataSource = tpController.GetRequestTypes();
                    ddlTipo.DataTextField = "DescTipoSolicitacao";
                    ddlTipo.DataValueField = "idTipoSolicitacao";
                    ddlTipo.DataBind();

                    ddlAccountManager.DataSource = dtAM;
                    ddlAccountManager.DataTextField = "Nome";
                    ddlAccountManager.DataValueField = "idUsuario";
                    ddlAccountManager.DataBind();

                    ddlEstagioVenda.DataSource = evController.GetEstagios();
                    ddlEstagioVenda.DataValueField = "idEstagioVenda";
                    ddlEstagioVenda.DataTextField = "DescEstagioVenda";
                    ddlEstagioVenda.DataBind();

                    ddlFabricante.DataSource = fabController.GetFabricantes();
                    ddlFabricante.DataValueField = "idFabricante";
                    ddlFabricante.DataTextField = "DescFabricante";
                    ddlFabricante.DataBind();

                    ddlAccountManager.SelectedValue = idAccountManager.ToString();
                    ddlEstagioVenda.SelectedValue = idEstagioVendas.ToString();
                    ddlFabricante.SelectedValue = idFabricante.ToString();
                    ddlTipo.SelectedValue = idTipoSolicitacao.ToString();

                    switch (Status)
                    {
                        case 'F':
                            cmdEncerrar.Enabled = false;
                            cmdSalvar.Enabled = false;
                            break;
                        case 'D':
                            break;
                        case 'E':
                            cmdDesignar.Enabled = false;
                            cmdEncerrar.Enabled = false;
                            cmdEncerra.Enabled = false;
                            cmdSalvar.Enabled = false;
                            break;
                    }

                    rdlAnalistaNegocios.DataSource = dtAN;
                    rdlAnalistaNegocios.DataValueField = "idUsuario";
                    rdlAnalistaNegocios.DataTextField = "Nome";
                    rdlAnalistaNegocios.DataBind();

                    int idTeam = usrController.GetUserTeamID(usrController.GetUserID(User.Identity.Name));

                    #region DisableControls
                    switch (idTeam)
                    {
                        case 1:
                            cmdEncerrar.Enabled = false;
                            cmdDesigna_.Enabled = false;
                            cmdDesignar.Enabled = false;
                            txtProposta.Enabled = false;
                            ddlAccountManager.Enabled = false;
                            break;
                        case 2:
                            cmdEncerrar.Enabled = false;
                            cmdDesigna_.Enabled = false;
                            cmdDesignar.Enabled = false;
                            txtProposta.Enabled = false;
                            ddlAccountManager.Enabled = false;
                            break;
                        case 3:
                            cmdDesigna_.Enabled = false;
                            cmdDesignar.Enabled = false;
                            ddlAccountManager.Enabled = false;
                            break;
                        case 9:
                            lblCriador.Visible = true;
                            break;
                        default:
                            cmdEncerrar.Enabled = false;
                            cmdDesigna_.Enabled = false;
                            cmdDesignar.Enabled = false;
                            cmdSalvar.Enabled = false;
                            break;
                    }
                    #endregion

                    #region LoadHistory

                    rpHistorico.DataSource = reqController.GetHistory(idSolicitacao);
                    rpHistorico.DataBind();

                    #endregion
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                finally
                {

                }

            }
        }

        protected void cmdSalvar_Click(object sender, EventArgs e)

        {
            ConnectionManager connMgr = new ConnectionManager();
            RequestController reqController = new RequestController();
            UserController usrController = new UserController();
            FabricanteController fabController = new FabricanteController();
            EstagioVendaController evController = new EstagioVendaController();
            TypeController tpController = new TypeController();
            
            int idSolicitacao = Convert.ToInt32(lblIDSolicitacao.Text);
            int idAccountManager = Convert.ToInt32(ddlAccountManager.SelectedValue);
            int idFabricante = Convert.ToInt32(ddlFabricante.SelectedValue);
            int idEstagioVenda = Convert.ToInt32(ddlEstagioVenda.SelectedValue);
            int idGestor = usrController.GetGestorID(idAccountManager);
            string Description = txtDescricao.Text;
            string Titulo = txtTitulo.Text;
            int idProposta = Convert.ToInt32(txtProposta.Text);
            int idTipo = Convert.ToInt32(ddlTipo.SelectedValue);
            int idUser = usrController.GetUserID(User.Identity.Name);
            DateTime datarevisada = Convert.ToDateTime(lblDataExpectativa.Text);

            try
            {
                datarevisada = Convert.ToDateTime(txtDataRevisada.Text);
            }
            catch
            {
            }
            finally
            {
            }


            reqController.UpdateRequest(idSolicitacao,idAccountManager,idFabricante,idEstagioVenda,Description,DateTime.Now,Titulo,idProposta,idTipo,datarevisada);


            if (Convert.ToInt32(lblTipoID.Text) != idTipo)
            {
                reqController.SaveHistory("Troca no tipo de solicitacao: " + tpController.GetRequestType(idTipo), idUser, idSolicitacao);
            }

            lblMsg.Text = "Solicitacao Alterada com sucesso!";
            lblMsg.ForeColor = System.Drawing.Color.Yellow;
            lblMsg.Visible = true;
          }
        
        protected void cmdEncerrar_Click(object sender, EventArgs e)
        {   
            RequestController reqController = new RequestController();
            UserController usrController = new UserController();
            EmailSender ES = new EmailSender();
            statusController stController = new statusController();
            
            int idSolicitacao = Convert.ToInt32(Request.QueryString["id"]);
            int idUsuario = usrController.GetUserID(User.Identity.Name);
            int idAnalistaNegocios = reqController.GetAnalistaNegocios(idSolicitacao);
            int idAccountManager = Convert.ToInt32(ddlAccountManager.SelectedValue);
            string AN = usrController.GetUserName(idAnalistaNegocios);
            string AM = usrController.GetUserLogin(idAccountManager);

            reqController.ChangeStatus(idSolicitacao,'D','E',idUsuario,txtObservacao.Text);

            //////////////////////////////////////////////////////////////////////////////////////////////////////
            System.Text.StringBuilder mailbody = new System.Text.StringBuilder();
            mailbody.Append("<html><head><title>E-Mail</title><style type=text/css>.style1{font-family: Arial, Helvetica, sans-serif;}</style></head><body><div id=top style=width: 100%; height: 20%><h1 class=style1>Solicitação concluída pelo Analista de Negócios</h1></div><div id=content style=height: 60%; width: 100%> <br /> idSolicitacao: <b>");
            mailbody.Append(lblIDSolicitacao.Text);
            mailbody.Append("</b><br />");
            mailbody.Append("Responsável: <b>");
            mailbody.Append(ddlAccountManager.SelectedItem);
            mailbody.Append("</b><br />");
            mailbody.Append("Analista de Negócios: <b>");
            mailbody.Append(AN);
            mailbody.Append("</b><br />");
            mailbody.Append("Título da Oportunidade: <b>");
            mailbody.Append(txtTitulo.Text);
            mailbody.Append("</b><br />");
            mailbody.Append("Tipo de Solicitação: <b>");
            mailbody.Append(ddlTipo.SelectedItem);
            mailbody.Append("</b><br />");
            mailbody.Append("Numero da Proposta: <b>");
            mailbody.Append(txtProposta.Text);
            mailbody.Append("</b><br />");
            mailbody.Append("Data de Expectativa: <b>");
            mailbody.Append(lblDataExpectativa.Text);
            mailbody.Append("Cliente: <b>");
            mailbody.Append(lblCliente.Text);
            mailbody.Append("</b><br />");
            mailbody.Append("Descrição: <b>");
            mailbody.Append(txtDescricao.Text);
            mailbody.Append("</b><br />");
            mailbody.Append("Fabricante: <b>");
            mailbody.Append(ddlFabricante.SelectedItem.ToString());
            mailbody.Append("</b><br />");
            mailbody.Append("Estágio de Venda: <b>");
            mailbody.Append(ddlEstagioVenda.SelectedItem.ToString());
            mailbody.Append("</b><br />");
            mailbody.Append("<br />");
            mailbody.Append("Observações: ");
            mailbody.Append(txtObservacao.Text);
            //////////////////////////////////////////////////////////////////////////////////////////////////////

            ES.SendNew(AM, usrController.GetUserLogin(idAnalistaNegocios), "Solicitação Entregue pelo Analista de Negócios", mailbody.ToString());

            Response.Redirect("../Pages/mgrSolicitacoes.aspx");
        }

        protected void cmdAprove_Click(object sender, ImageClickEventArgs e)
        {

        }

        protected void OkButton_Click(object sender, EventArgs e)
        {
        }

        protected void cmdDesigna__Click(object sender, EventArgs e)
        {
            RequestController reqController = new RequestController();
            UserController usrController = new UserController();
            EmailSender eSender = new EmailSender();
            TypeController tpController = new TypeController();

            int idSolicitacao = Convert.ToInt32(lblIDSolicitacao.Text);
            int idAnalistaNegocios = Convert.ToInt32(rdlAnalistaNegocios.SelectedValue);
            int idAccountManager = Convert.ToInt32(ddlAccountManager.SelectedValue);
            char StatusOld = Convert.ToChar(lblStatusID.Text);
            string AnalistaNegocios = usrController.GetUserLogin(idAnalistaNegocios);
            string AccountManager = usrController.GetUserLogin(idAccountManager);
            string Subject = "Designação do Analista de Negócios: " + rdlAnalistaNegocios.SelectedItem.ToString();

            if (StatusOld == 'D')
            {
                reqController.ChangeAN(idSolicitacao, idAnalistaNegocios);
                reqController.ChangeStatus(idSolicitacao, StatusOld, 'D', idAnalistaNegocios, " ");
                Subject = "Nova designação do Analista de Negócios: " + rdlAnalistaNegocios.SelectedItem.ToString();
                
                //////////////////////////////////////////////////////////////////////////////////////////////////////
                System.Text.StringBuilder mailbody2 = new System.Text.StringBuilder();
                mailbody2.Append("<html><head><title>E-Mail</title><style type=text/css>.style1{font-family: Arial, Helvetica, sans-serif;}</style></head><body><div id=top style=width: 100%; height: 20%><h1 class=style1>Designação do Analista de Negócios</h1></div><div id=content style=height: 60%; width: 100%> <br /> idSolicitacao: <b>");
                mailbody2.Append(lblIDSolicitacao.Text);
                mailbody2.Append("</b><br />");
                mailbody2.Append("Responsável: <b>");
                mailbody2.Append(ddlAccountManager.SelectedItem);
                mailbody2.Append("</b><br />");
                mailbody2.Append("Novo Analista de Negócios: <b>");
                mailbody2.Append(usrController.GetUserName(Convert.ToInt32(lblAnalistaID.Text)));
                mailbody2.Append(" --> ");
                mailbody2.Append(rdlAnalistaNegocios.SelectedItem);
                mailbody2.Append("</b><br />");
                mailbody2.Append("Título da Oportunidade: <b>");
                mailbody2.Append(txtTitulo.Text);
                mailbody2.Append("</b><br />");
                mailbody2.Append("Tipo de Solicitação: <b>");
                mailbody2.Append(tpController.GetRequestType(Convert.ToInt32(ddlTipo.SelectedValue)));
                mailbody2.Append("</b><br />");
                mailbody2.Append("Numero da Proposta: <b>");
                mailbody2.Append(txtProposta.Text);
                mailbody2.Append("</b><br />");
                mailbody2.Append("Data de Expectativa: <b>");
                mailbody2.Append(lblDataExpectativa.Text);
                mailbody2.Append("</b><br />");
                mailbody2.Append("Cliente: <b>");
                mailbody2.Append(lblCliente.Text);
                mailbody2.Append("</b><br />");
                mailbody2.Append("Descrição: <b>");
                mailbody2.Append(txtDescricao.Text);
                mailbody2.Append("</b><br />");
                mailbody2.Append("Fabricante: <b>");
                mailbody2.Append(ddlFabricante.SelectedItem.ToString());
                mailbody2.Append("</b><br />");
                mailbody2.Append("Estágio de Venda: <b>");
                mailbody2.Append(ddlEstagioVenda.SelectedItem.ToString());
                mailbody2.Append("</b><br />");
                //////////////////////////////////////////////////////////////////////////////////////////////////////

                eSender.SendNew(AnalistaNegocios, usrController.GetUserLogin(Convert.ToInt32(lblAnalistaID.Text)), Subject, mailbody2.ToString());

                reqController.SaveHistory("Novo Analista de Negócios: " + usrController.GetUserName(idAnalistaNegocios), usrController.GetUserID(User.Identity.Name), idSolicitacao);
            }
            else
            {
                reqController.ChangeAN(idSolicitacao, idAnalistaNegocios);
                reqController.ChangeStatus(idSolicitacao, StatusOld, 'D', idAnalistaNegocios, " ");

                //////////////////////////////////////////////////////////////////////////////////////////////////////
                System.Text.StringBuilder mailbody = new System.Text.StringBuilder();
                mailbody.Append("<html><head><title>E-Mail</title><style type=text/css>.style1{font-family: Arial, Helvetica, sans-serif;}</style></head><body><div id=top style=width: 100%; height: 20%><h1 class=style1>Designação do Analista de Negócios</h1></div><div id=content style=height: 60%; width: 100%> <br /> idSolicitacao: <b>");
                mailbody.Append(lblIDSolicitacao.Text);
                mailbody.Append("</b><br />");
                mailbody.Append("Responsável: <b>");
                mailbody.Append(ddlAccountManager.SelectedItem);
                mailbody.Append("</b><br />");
                mailbody.Append("Analista de Negócios: <b>");
                mailbody.Append(rdlAnalistaNegocios.SelectedItem);
                mailbody.Append("</b><br />");
                mailbody.Append("Título da Oportunidade: <b>");
                mailbody.Append(txtTitulo.Text);
                mailbody.Append("</b><br />");
                mailbody.Append("Tipo de Solicitação: <b>");
                mailbody.Append(tpController.GetRequestType(Convert.ToInt32(ddlTipo.SelectedValue)));
                mailbody.Append("</b><br />");
                mailbody.Append("Numero da Proposta: <b>");
                mailbody.Append(txtProposta.Text);
                mailbody.Append("</b><br />");
                mailbody.Append("Data de Expectativa: <b>");
                mailbody.Append(lblDataExpectativa.Text);
                mailbody.Append("</b><br />");
                mailbody.Append("Cliente: <b>");
                mailbody.Append(lblCliente.Text);
                mailbody.Append("</b><br />");
                mailbody.Append("Descrição: <b>");
                mailbody.Append(txtDescricao.Text);
                mailbody.Append("</b><br />");
                mailbody.Append("Fabricante: <b>");
                mailbody.Append(ddlFabricante.SelectedItem.ToString());
                mailbody.Append("</b><br />");
                mailbody.Append("Estágio de Venda: <b>");
                mailbody.Append(ddlEstagioVenda.SelectedItem.ToString());
                mailbody.Append("</b><br />");
                //////////////////////////////////////////////////////////////////////////////////////////////////////

                eSender.SendNew(AnalistaNegocios, AccountManager, Subject, mailbody.ToString());
            }
            
            Response.Redirect("../Pages/edit.aspx?id=" + idSolicitacao);
        }

        protected void cmdSalvaHistorico_Click(object sender, EventArgs e)
        {
            RequestController reqController = new RequestController();
            UserController usrController = new UserController();
            
            int idSolicitacao = Convert.ToInt32(lblIDSolicitacao.Text);
            int idUser = usrController.GetUserID(User.Identity.Name);

            reqController.SaveHistory(txtHistorico.Text, idUser, idSolicitacao);
            Response.Redirect(Request.Url.AbsoluteUri);
        }
    }
}